余烬缀记

使用 wireshark 捕获 rustls 发送的请求

edited on:

# 导出 rustls 的 ssl key 日志

创建进程特定的环境变量

std::env::set_var("SSLKEYLOGFILE", "<文件路径>");

也可以创建系统环境变量,rustls::KeyLogFile 会自动读取该环境变量,不过 Chrome 似乎也会读取该变量

创建 TLS 连接的客户端配置,然后连接到 TcpStream

let mut root_cert_store = RootCertStore::empty();  
root_cert_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned());  
let mut config = ClientConfig::builder()  
    .with_root_certificates(root_cert_store)  
    .with_no_client_auth();
// KeyLogFile 会读取 Key 为 SSLKEYLOGFILE 的环境变量,然后写入日志到该文件路径
config.key_log = Arc::new(KeyLogFile::new());
let connector = TlsConnector::from(Arc::new(config));
...

该代码依赖 tokiotokio_rustlswebpki_roots

# 配置 wireshark

和大多数教程一样在 wireshark 的编辑->首选项->Protocols 下面找到 TLS,然后在 (Pre)-Master-Sectet log filename 下面的输入框输入环境变量 SSLKEYLOGFILE 的值

参考文章:

https://www.cnblogs.com/theseventhson/p/14618157.html